// ~ Package Declaration
// ==================================================

package com.wms.data;


// ~ Comments
// ==================================================

/**
 * 
 * 使用訊息設定的exception，都需要繼承此類別，并設定相關訊息代碼.
 * 
 * <pre>
 * 歷史紀錄：
 * 2009/2/20 Timothy
 * 	新建檔案
 * </pre>
 * 
 * @author <pre>
 * SD
 * 	Timothy
 * PG
 * 
 * UT
 * 
 * MA
 * </pre>
 * @version $Rev$
 * 
 *          <p/>
 *          $Id$
 * 
 */
public class WmsFrameworkMessageException extends WmsFrameworkException {

	// ~ Static Fields
	// ==================================================

	private static final long serialVersionUID = 4682948794412982731L;

	// ~ Fields
	// ==================================================

	private String messageCode;
	private Object[] arguments;

	// ~ Constructors
	// ==================================================

	public WmsFrameworkMessageException(String messageCode) {
		
		super();
		
		this.messageCode = messageCode;
	}
	
	public WmsFrameworkMessageException(String messageCode, Object... arguments) {

		super();

		this.messageCode = messageCode;
		this.arguments = arguments;
	}

	public WmsFrameworkMessageException(String messageCode, String message, Object... arguments) {

		super(message);

		this.messageCode = messageCode;
		this.arguments = arguments;
	}

	public WmsFrameworkMessageException(String messageCode, Throwable cause, Object... arguments) {

		super(cause);

		this.setMessageInfo(cause, messageCode, arguments);
	}

	public WmsFrameworkMessageException(String messageCode, String message, Throwable cause, Object... arguments) {

		super(message, cause);

		this.setMessageInfo(cause, messageCode, arguments);
	}

	// ~ Methods
	// ==================================================

	/**
	 * <pre>
	 * 2010-3-15 Timothy
	 * </pre>
	 * 
	 * @param cause
	 * @param messageCode
	 * @param arguments
	 */
	private void setMessageInfo(Throwable cause, String messageCode, Object... arguments) {

		if (cause instanceof WmsFrameworkMessageException) {

			WmsFrameworkMessageException vfme = (WmsFrameworkMessageException) cause;

			this.setMessageInfo(vfme.getCause(), vfme.getMessageCode(), vfme.getArguments());
		}
		else {

			this.messageCode = messageCode;
			this.arguments = arguments;
		}
	}

	/**
	 * @return 傳回 messageCode。
	 */
	public final String getMessageCode() {

		return this.messageCode;
	}

	/**
	 * @return 傳回 arguments。
	 */
	public final Object[] getArguments() {

		return this.arguments;
	}

}
